# Remote Direct Memory Access (RDMA) für Intel® Ethernet-Geräte

Mit Remote Direct Memory Access (oder RDMA) kann ein Netzwerkgerät Daten direkt an den und von dem Anwendungsspeicher eines anderen Systems übertragen. In manchen Netzwerkumgebungen lässt sich dadurch der Durchsatz erhöhen und die Latenz verringern.

- Geräte mit Intel® Ethernet der 800er Reihe unterstützen sowohl iWARP als auch RoCEv2.
- Geräte mit Intel® Ethernet der X722er Reihe unterstützen lediglich iWARP.

Der Hauptunterschied liegt darin, dass RDMA von iWARP über TCP und von RoCEv2 über UDP verarbeitet wird.

Bei Geräten mit RDMA-Funktionen wird RDMA auf den folgenden Betriebssystemen unterstützt:

- Linux*
- FreeBSD*
- VMware* ESXi*
- Microsoft* Windows Server*

Um Leistungsabfall durch Paketverlust zu vermeiden, aktivieren Sie Flusssteuerung auf Verbindungsebene oder prioritäre Flusssteuerung auf allen Netzwerkschnittstellen und Switches.

| HINWEISE: Wenn Sie bei Systemen, die unter einem Microsoft*-Windows*-Server-Betriebssystem laufen, die *QoS/Priorität Durchflusssteuerung aktivieren, wird diese die Linklevel-Durchflusssteuerung deaktivieren. Im Multiport-Modus mit mehr als 4 Ports unterstützen Geräte auf Basis der Intel® Ethernet 800 Reihe kein RDMA. RDMA und Bündelung sind auf Linux-Systemen nicht kompatibel. Wird RDMA aktiviert, funktioniert die Bündelung nicht.

## RDMA auf Linux oder FreeBSD

Für Intel Ethernet Geräte, die RDMA auf Linux oder FreeBSD unterstützen, sind die in der folgenden Tabelle angegebenen Treiber zu verwenden.

Gerät | Linux | FreeBSD | Unterstützte Protokolle
--- | --- | --- | ---
Basistreiber | RDMA-Treiber | Basistreiber | RDMA-Treiber
Intel® Ethernet der 800er Reihe | ice | irdma | ice | irdma | RoCEv2, iWARP
Intel® Ethernet der X722er Reihe | i40e | irdma | ixl | iw_ixl | iWARP

##### Grundlegende Installationsanleitungen

Im Wesentlichen besteht die Installation und Konfiguration von RDMA auf Linux oder FreeBSD aus den folgenden Schritten. Weitere Einzelheiten finden Sie in der README-Datei innerhalb des entsprechenden Tarball-Archivs des RDMA-Treibers.

1. Den Basistreiber installieren.
2. Den RDMA-Treiber installieren.
3. Jegliche Bibliotheken für den RDMA Benutzermodus installieren und patchen. Die genauen Schritte variieren nach Betriebssystem; weitere Informationen finden Sie in der Readme-Datei für den RDMA-Treiber.
4. Flusssteuerung auf Ihrem Gerät aktivieren. Weitere Einzelheiten und Informationen zu unterstützten Modi finden Sie in der README-Datei für den Basistreiber.
5. Bei Verwendung von RoCE die Flusssteuerung (PFC oder LFC) auf dem Gerät und dem Endpunkt, mit dem Ihr System verbunden ist, aktivieren. Näheres hierzu erfahren Sie in Ihrer Switch-Dokumentation und für Linux im Konfigurationsleitfaden für Intel® Ethernet Linux Flow Control der Produktreihe 800 für RDMA-Anwendungsfälle.

### RDMA für virtualisierte Umgebungen in Linux

Auf der Intel Ethernet 800 Serie basierende Geräte unterstützen RDMA in einer Linux-VF auf unterstützten Windows- oder Linux-Hosts Lesen Sie die README-Datei im Linux-RDMA-Treiber-Tarball, um weitere Informationen über das Laden und Konfigurieren von RDMA in einer Linux-VF zu erhalten.

## RDMA auf Microsoft Windows

### RDMA für Network Direct (ND) Benutzermodusanwendungen

Über Network Direct (ND) erhalten Benutzermodusanwendungen Zugriff auf RDMA-Funktionen.

| HINWEIS: Benutzermodusanwendungen setzten möglicherweise Komponenten wie Microsoft* HPC Pack oder Intel MPI Library voraus. Weitere Einzelheiten finden Sie in der Dokumentation zu Ihrer Anwendung.

#### RDMA Benutzermodusinstallation

Der Intel® Ethernet User Mode RDMA Provider wird auf Microsoft Windows Server 2012 R2 und höher unterstützt.

Zur Installation der Network Direct-Funktionen für den Benutzermodus gehen Sie wie folgt vor:

1. Führen Sie auf dem Installationsdatenträger die Datei „Autorun.exe“ aus, um das Installationsprogramm zu starten. Wählen Sie „Install Drivers and Software“ (Treiber und Software installieren) und akzeptieren Sie den Lizenzvertrag.
2. Wählen Sie im Bildschirm „Setupoptionen“ die Option „Intel® Ethernet User Mode RDMA Provider“.
3. Wählen Sie im Bildschirm „RDMA Configuration Options“ (iWARP Konfigurationsoptionen) ggf. die Option „Enable RDMA routing across IP Subnets“ (iWARP-Routing in IP-Subnetzen aktivieren). Beachten Sie, dass diese Option auch dann bei der Installation der Basistreiber angezeigt wird, wenn RDMA für den Benutzermodus nicht gewählt wurde. Der Grund ist, dass diese Option ebenfalls bei der Funktionalität Network Direct Kernel zur Verfügung steht.
4. Falls Windows*-Firewall installiert und aktiviert ist, wählen Sie „Create an Intel® Ethernet RDMA Port Mapping Service rule in Windows* Firewall“ (Regel für Intel® Ethernet iWARP Port Mapping Service in Windows*-Firewall anlegen) und dann die Netzwerke, für die die Regel gelten soll.

   | HINWEIS: Falls Windows*-Firewall deaktiviert ist oder Sie eine Firewall eines Drittanbieters verwenden, müssen Sie diese Regel manuell hinzufügen.

5. Fahren Sie mit der Treiber- und Softwareinstallation fort.

### RDMA Network Direct Kernel (NDK)

Die RDMA Network Direct Kernel-(NDK-)Funktionalität ist in den Basisnetzwerktreibern von Intel enthalten. Es müssen zu diesem Zweck keine weiteren Funktionen installiert werden.

#### RDMA-Routing über IP-Subnetze

Wenn Sie die NDK RDMA-Funktionalität in Subnetzen freischalten möchten, müssen Sie bei der Installation der Basistreiber im Bildschirm „RDMA Configuration Options“ (RDMA Konfigurationsoptionen) die Option „Enable RDMA routing across IP Subnets“ (RDMA-Routing in IP-Subnetzen aktivieren) wählen.

### Aktivierung der prioritären Flusssteuerung (PFC) auf einem Server, der unter einem Microsoft*-Windows*-Betriebssystem läuft

Um Leistungsabfall durch Paketverlust zu vermeiden, aktivieren Sie die prioritäre Flusssteuerung (PFC) oder die Linklevel-Durchflusssteuerung auf allen Netzwerkschnittstellen und Switches.

| ANMERKUNG: Wenn Sie bei Systemen, die unter einem Microsoft-Windows-Betriebssystem laufen, die *QoS/Priorität Durchflusssteuerung aktivieren, wird diese die Linklevel-Durchflusssteuerung deaktivieren.

Verwenden Sie die folgenden PowerShell*-Befehle, um PFC auf Microsoft Windows Server zu aktivieren:

`Install-WindowsFeature -Name Data-Center-Bridging -IncludeManagementTools
New-NetQoSPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass -Name "SMB" -Priority 3 -BandwidthPercentage 60 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $FALSE
Enable-NetAdapterQos -Name "Slot1 4 2 Port 1"`

### Überprüfen der RDMA-Funktion mit Microsoft PowerShell

Mit dem folgenden Microsoft PowerShell-Befehl können Sie überprüfen, ob RDMA auf den Netzwerkschnittstellen aktiviert ist:

`Get-NetAdapterRDMA`

Mit dem folgenden PowerShell-Befehl können Sie überprüfen, ob die Netzwerkschnittstellen RDMA unterstützen und Multichannel aktiviert ist:

`Get-SmbClientNetworkInterface`

Mit dem folgenden PowerShell-Befehl können Sie überprüfen, ob Network Direct im Betriebssystem aktiviert ist:

`Get-NetOffloadGlobalSetting | Select NetworkDirect`

Mit netstat können Sie sicherstellen, dass jede RDMA-fähige Netzwerkschnittstelle an Port 445 einen Listener hat (Windows* Client-Betriebssysteme mit RDMA-Unterstützung posten unter Umständen keine Listener). Zum Beispiel:

`netstat.exe -xan | ? {$_ -match "445"}`

### RDMA für virtualisierte Umgebungen in Windows

Zur Aktivierung der RDMA-Funktionalität auf virtuellen Adaptern, die mit einem VMSwitch verbunden sind, sind folgende Schritte erforderlich:

- Aktivieren Sie die erweiterten Eigenschaften von SR-IOV (Single Root IO Virtualization) und VMQ (Virtual Machine Queues) auf jedem Port.
- Legen Sie die Anzahl der VFs fest, für die RDMA-Funktionen aktiviert werden sollen. Sie können bis zu 32 VFs für RDMA-Funktionen aktivieren.

Unter bestimmten Umständen können Sie diese Einstellungen standardmäßig deaktivieren. Sie können diese Optionen im Einstellungsbereich des Adapters von Intel PROSet ACU oder auf der Registerkarte „Erweitert“ der Adaptereigenschaften manuell konfigurieren. Alternativ können Sie die folgenden PowerShell-Befehle verwenden:

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *SRIOV -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *VMQ -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <1-32>`

### Konfiguration von RDMA Guest Support (NDK-Modus 3)

Im NDK-Modus 3 können Windows*-Komponenten im Kernelmodus auf RDMA-Funktionen in Hyper-V-Gastpartitionen zugreifen. So wird NDK-Modus 3 auf einem Intel Ethernetgerät aktiviert:

1. Aktivieren Sie SR-IOV im BIOS oder UEFI Ihres Systems.
2. Aktivieren Sie die erweiterte Einstellung für SR-IOV auf dem Gerät.
3. Aktivieren Sie SR-IOV auf dem mit dem Gerät verbundenen VMSwitch, indem Sie für alle physischen Funktionen auf demselben Gerät die folgenden Schritte durchführen:
   `New-VMSwitch -Name <Switchname> -NetAdapterName <Gerätename>`
   `-EnableIov $true`
4. Konfigurieren Sie die Anzahl der virtuellen Funktionen (VF) für RDMA auf dem Gerät über die erweiterte Einstellung „RdmaMaxVfsEnabled“. Alle physischen Funktionen müssen auf den gleichen Wert gesetzt werden. Der Wert ist die maximale Anzahl von VF mit gleichzeitiger RDMA-Unterstützung für das gesamte Gerät. Wenn mehr VF aktiviert werden, stehen begrenzte RDMA-Ressourcen aus physischen Funktionen (PF) und anderen VF zur Verfügung.
   `Set-NetAdapterAdvancedProperty -Name <Gerätename> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>`
5. Deaktivieren Sie alle PF-Adapter auf dem Host und aktivieren Sie sie neu. Dies ist erforderlich, wenn das Registrierungs-Schlüsselwort „RdmaMaxVfsEnabled“ geändert oder ein VMSwitch erstellt oder verworfen wird.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Erstellen Sie VM Netzwerkadapter für VM, die RDMA VF-Unterstützung erfordern.
   `Add-VMNetworkAdapter -VMName <VM-Name> -VMNetworkAdapterName <Gerätename> -SwitchName <Switchname>`
7. Falls Sie die Verwendung von Microsoft* Windows* 10 Creators Update (RS2) oder höher auf einer Gastpartition planen, setzen Sie das RDMA-Weight auf dem VM-Netzwerkadapter, indem Sie den folgenden Befehl auf dem Host eingeben:
   `Set-VMNetworkAdapterRdma -VMName <VM-Name> -VMNetworkAdapterName <Gerätename> -RdmaWeight 100`
8. Setzen Sie das SR-IOV-Weight auf dem VM-Netzwerkadapter (Hinweis: SR-IOV-Weight muss auf 0 gesetzt werden, bevor RdmaWeight auf 0 gesetzt wird):
   `Set-VMNetworkAdapter -VMName <VM-Name> -VMNetworkAdapterName <Gerätename> -IovWeight 100`
9. Installieren Sie den VF-Netzwerkadapter mit dem PROSET Installer in der VM.
10. Aktivieren Sie RDMA auf dem VF-Treiber und Hyper-V-Netzwerkadapter über PowerShell in der VM:
    `Set-NetAdapterAdvancedProperty -Name <Gerätename> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

### RDMA für NDK-Funktionen wie SMB Direct (Server Message Block)

NDK ermöglicht die Verwendung von RDMA-Funktionen (wie SMB Direct Storage) durch Windows* Komponenten.

#### Testen von NDK: Microsoft Windows SMB Direct with DiskSPD

In diesem Abschnitt wird die empfohlene Methode beschrieben, um die Funktionalität und Leistung von RDMA für Intel Ethernet auf Microsoft Windows-Betriebssystemen zu testen.

SMB Direct ist eine Speicherworkload. Daher kann es vorkommen, dass die Leistung der Benchmark auf die Geschwindigkeit des Speichergeräts anstatt der getesteten Netzwerkschnittstelle begrenzt ist. Intel empfiehlt die Verwendung des schnellstmöglichen Speichersystems, um die echte Leistungsfähigkeit der untersuchten Netzwerkgeräte zu testen.

Testanleitung:

1. Konfigurieren und verbinden Sie mindestens zwei Server, auf denen ein unterstütztes Microsoft* Windows Server*-Betriebssystem ausgeführt wird, mit mindestens einem RDMA-fähigen Intel® Ethernet-Gerät pro Server.
2. Richten Sie auf dem als SMB Server vorgesehenen Server eine SMB-Freigabe ein. Es kann vorkommen, dass die Leistung der Benchmark auf die Geschwindigkeit des Speichergeräts anstatt der getesteten Netzwerkschnittstelle begrenzt ist. Die Einrichtung des Speichersystems wird in diesem Dokument nicht behandelt. Sie können den folgenden PowerShell-Befehl verwenden:
   `New-SmbShare -Name <SMBsharename> -Path <SMBsharefilepath> -FullAccess <domainname>\Administrator,Everyone`
   Zum Beispiel:
   `New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Laden Sie unter folgendem Link das Microsoft-Dienstprogramm Diskspd herunter: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. Wählen Sie mit CMD oder Powershell den Ordner DiskSpd und führen Sie Tests aus. (Einzelheiten zu den Parametern finden Sie in der Dokumentation zu Diskspd)
   Beispiel: Festlegen der Blockgröße auf 4K, Test 60 Sekunden lang laufen lassen, Deaktivieren von sämtlichem Hardware- und Software-Caching, Latenzstatistiken messen und anzeigen, 16 sich überlappende IOs und 16 Threads pro Target verwenden, 0 % wahlfreie Schreibzugriffe und 100 % Lesezugriffe, und Generieren einer 10-GB-Testdatei unter „\\<SMBserverTestIP>\<SMBsharename>\test.dat“:
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Kontrollieren Sie mit Perfmon-Zählern wie „RDMA Activity“ und „SMB Direct Connection“, dass RDMA-Traffic läuft. Weitere Informationen finden Sie in der Dokumentation von Microsoft*.

## Kunden-Support

- Allgemeine Intel Support-Website: http://support.intel.com
- Informationen zu Netzwerkprodukten: http://www.intel.com/network

## Rechtliche Hinweise und Haftungsausschlüsse

Copyright © 2019 - 2022, Intel Corporation. Alle Rechte vorbehalten.

Intel Corporation übernimmt keine Verantwortung für Fehler oder Auslassungen in diesem Dokument. Außerdem macht Intel keinerlei Zusagen, dessen Inhalt zu aktualisieren.

Intel ist eine Marke der Intel Corporation in den USA und/oder anderen Ländern.

*Andere Marken oder Produktnamen sind Eigentum der jeweiligen Inhaber.

Diese Software wird unter Lizenz bereitgestellt und darf nur unter Beachtung der Bestimmungen dieser Lizenz genutzt oder kopiert werden. Die Informationen in diesem Dokument dienen nur der Information. Sie können ohne Vorankündigung geändert werden und sind nicht als Zusage oder verpflichtende Aussage seitens der Intel Corporation zu verstehen. Die Intel Corporation übernimmt keine Verantwortung oder Haftung für Fehler oder Ungenauigkeiten in diesem Dokument oder jeglicher Software, die in Zusammenhang mit diesem Dokument bereitgestellt wird. Sofern nicht durch eine solche Lizenz gestattet, darf kein Teil dieses Dokuments ohne ausdrückliche schriftliche Zustimmung der Intel Corporation reproduziert, in einem Datenabfragesystem gespeichert oder in beliebiger Form und auf beliebigem Weg übertragen werden.